﻿#include "help.h"
#include <iostream>

void x_help()
{
    std::cout << "1.功能是将git或svn管控的代码版本信息根据模板输出到文件中, 其中包括版本控制类型(git或svn)、代码路径、代码版本号、代码版本日期时间." << std::endl;
    std::cout << "2.运行前提条件需要安装了git或svn, 可通过cmd命令中输入git或svn查看是否满足git和svn的运行条件." << std::endl;
    std::cout << "3.以下命令无顺序要求." << std::endl;
    std::cout << std::endl;

    std::cout << "4.参数" << std::endl;
    std::cout << "    -h" << std::endl;
    std::cout << "      获取使用手册." << std::endl;
    std::cout << "    -p:[代码绝对路径]" << std::endl;
    std::cout << "      git或svn管控的代码路径." << std::endl;
    std::cout << "    -t:[模板文件绝对路径]" << std::endl;
    std::cout << "      用于生成目标的模板文件, 模板文件中可替换标识符参考第4条被替换的变量." << std::endl;

    std::cout << "    -og:[目标文件绝对路径]" << std::endl;
    std::cout << "      获取代码的git版本信息输出到文件." << std::endl;

    std::cout << "    -os:[目标文件绝对路径]" << std::endl;
    std::cout << "      获取代码的svn版本信息输出到文件." << std::endl;

    std::cout << "    -ogs:[目标文件绝对路径]" << std::endl;
    std::cout << "      首先获取代码的git版本信息输出到文件并结束任务. 如果获取git版本信息失败, 那么在获取代码的svn版本信息输出到文件." << std::endl;

    std::cout << "    -osg:[目标文件绝对路径]" << std::endl;
    std::cout << "      首先获取代码的svn版本信息输出到文件并结束任务. 如果获取svn版本信息失败, 那么在获取代码的git版本信息输出到文件." << std::endl;

    std::cout << "    -gH" << std::endl;
    std::cout << "      可选参数, 只对git版本信息有效, 表示$GSRevTxt$会被替换为git版本长SHA-1值, 否则是短SHA-1值(SHA-1前7个字符)." << std::endl;

    std::cout << "    -tortoise" << std::endl;
    std::cout << "      可选参数, 表示TortoiseGit或TortoiseSVN的 $WCREV$被替换为$GSRevVal$的值, $WCDATE$被替换为$GSDate$的值, $WCURL$被替换为$GSCodeUrl$的值. 参考第4条被替换的变量" << std::endl;
    
    std::cout << std::endl;
    std::cout << "  举例:" << std::endl;
    std::cout << "   4.1.获取\"D:\\Tmp\\md\"目录的git版本信息(长SHA-1值), 根据\"D:\\Tmp\\md\\CodeVer.tmpl\"文件,生成\"D:\\Tmp\\md\\CodeVer.h\"目标文件." << std::endl;
    std::cout << "         gsrev \"-gH\" \"-p:D:\\Tmp\\md\" \"-t:D:\\Tmp\\md\\CodeVer.tmpl\" \"-og:D:\\Tmp\\md\\CodeVer.h\"" << std::endl;
    std::cout << "   4.2.获取\"D:\\Tmp\\md\"目录的git版本信息, 根据\"D:\\Tmp\\md\\CodeVer.tmpl\"文件,生成\"D:\\Tmp\\md\\CodeVer.h\"目标文件." << std::endl;
    std::cout << "       如果git版本信息失败那么获取svn的版本新根据模板生成目标文件." << std::endl;
    std::cout << "         gsrev \"-p:D:\\Tmp\\md\" \"-t:D:\\Tmp\\md\\CodeVer.tmpl\" \"-ogs:D:\\Tmp\\md\\CodeVer.h\"" << std::endl;
    std::cout << "   注:使用引号包含参数解决空格导致命令参数被分割成多个参数的问题." << std::endl;

    std::cout << std::endl;

    std::cout << "5.被替换的变量" << std::endl;
    std::cout << "   $GSBuildDate$     - 被替换为: 构建时间, 如\"2024-11-03 20:15:40\"." << std::endl;
    std::cout << "   $GSCodeVerMgr$    - 被替换为: git或svn." << std::endl;
    std::cout << "   $GSCodePath$      - 被替换为: 代码的本地路径, 如\"D:\\Tmp\\md\"." << std::endl;
    std::cout << "   $GSCodeUrl$       - 被替换为: git路径如, 如\"origin{git@gitee.com:test/md.git};vgitdb{git@code.test.com:test/md.git}\"; svn路径如\" https://code.test.com/svn/test\"." << std::endl;
    std::cout << "   $GSRevTxt$        - 被替换为: git是版本SHA-1值,如\"c359190\"; svn是版本号16进制, 如\"15\"转换为\"f\"." << std::endl;
    std::cout << "   $GSRevVal$        - 被替换为: git是版本SHA-1值前7个16进制字符转换10进制的数值,如\"204837264\"; svn是版本号, 如\"21\"." << std::endl;
    std::cout << "   $GSDate$          - 被替换为: 日期时间, 如2024-11-03 17:03:19 +800 [2]." << std::endl;
    std::cout << std::endl;
    std::cout << "   $WCURL$             - 同$GSCodeUrl$." << std::endl;
    std::cout << "   $WCREV$             - 同$GSRevVal$." << std::endl;
    std::cout << "   $WCDATE$            - 同$GSDate$." << std::endl;
}
